package com.loop.homework;


import java.util.*;

public class Homework {
    public static void main(String[] args) {
        List<Person> people = work3();
        for (Person p : people) {
            System.out.println(p);
        }
        System.out.println(isLinkedFastThanArray());
        //work2();
    }

    /**
     * 1.  创建ArrayList集合,添加10个String类型数据{"1","2","3","4","5","6","7","8","9","10"}
     *
     * 要求 :
     *
     *  1. 在2索引位置插入元素"2ADD"
     *
     *  2. 获取5索引位置元素
     *
     *  3. 删除6索引位置元素
     *
     *  4. 修改7索引位置元素为"7Modify"
     *
     *  上述4个操作进行完毕,使用迭代器遍历集合内容
     */
    public static void work1(){
        String[] arr = {"1","2","3","4","5","6","7","8","9","10"};
        ArrayList list = new ArrayList();
        for (int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
        }
        list.add(2,"2ADD");
        System.out.println(list.get(5));
        list.remove(6);
        list.set(7,"7Modify");
        System.out.println(list);

        Iterator iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

    /**
     * 2.分析以下需求，并用代码实现：
     *
     * 	(1)定义List集合，存入多个字符串，其中包含三个连续的"def"
     *
     * 	(2)删除集合中所有"def"字符串
     *
     * 	(3)然后利用迭代器遍历集合元素并输出
     */
    public static void work2(){
        String[] arr = {"a","b","def","def","def","c"};
        ArrayList<String> list = new ArrayList(Arrays.asList(arr)) ;
        System.out.println(list);
        ListIterator<String> iterator = list.listIterator();
        while (iterator.hasNext()){
            String str = iterator.next();
            if ("def".equals(str)){
                iterator.remove();
            }else {
                System.out.println(str);
            }
        }

    }


    /**
     * 3. 编写Person类,类中具有姓名,年龄,性别,地址属性, 属性值如下列表
     *
     * 姓名 年龄 性别 地址
     *
     * 张三 23 男 河南
     *
     * 李四 45 男 河南
     *
     * 王五 34 女 山西
     *
     * 赵六 22 男 上海
     *
     * 田七 33 女 北京
     *
     *  1) 将以上5个人的信息存储到集合中,遍历集合,在main函数中依次输出每个人的所有信息内容.
     *
     *  2) 姓名为李四的员工后添加赵六信息如下 : 姓名 zhao6    24    女   广州
     *
     *  3) 删除姓名为王五的个人信息
     */
    public static List<Person> work3(){
        ArrayList<Person> perList = new ArrayList<>();
        perList.add(new Person("张三",23,"男","河南"));
        perList.add(new Person("李四",45,"男","河南"));
        perList.add(new Person("王五",34,"女","山西"));
        perList.add(new Person("赵六",22,"男","上海"));
        perList.add(new Person("田七",33,"女","北京"));

        Person person = new Person("wanger",22,"男","上海");

        perList.add(person);
        Person person1 = perList.get(5);
        System.out.println(person1);

        for (int i = 0; i < perList.size(); i++) {
            if ("李四".equals(perList.get(i).getName())){
                perList.add(i+1,new Person("zhao6",24,"女","广州"));
            }
            if ("王五".equals(perList.get(i).getName())){
                perList.remove(i);
            }
        }
        return perList;
    }


    /**
     * 4. ArrayList在头尾操作元素和LinkedList使用特有方法在头尾操作元素的效率
     *
     *    提示 : 效率比较, 就是ArrayList 头尾增删用的时间, 与LinkedList头尾增删用的时间, 比较出谁的效率高
     */

    public static boolean isLinkedFastThanArray(){
        System.out.println(testLinkedList());
        System.out.println(testArrayList());
        return testLinkedList() < testArrayList();
    }

    /**
     * 测试ArrayList的添加速度
     * @return
     */
    public static long testArrayList(){
        ArrayList<Integer> arrayList = new ArrayList();

        long begin = new Date().getTime();
        for (int i = 0; i < 100000; i++) {
            arrayList.add(i);
            arrayList.add(0,i);
        }
        for (int i = 0; i < 100000; i++) {
            arrayList.remove(0);
            arrayList.remove(arrayList.size()-1);
        }
        long end = new Date().getTime();
        return end-begin;
    }

    /**
     * 测试LinkedList的添加速度
     * @return
     */
    public static long testLinkedList(){
        LinkedList<Integer> linkedList = new LinkedList();
        long begin = new Date().getTime();
        for (int i = 0; i < 100000; i++) {
            linkedList.addFirst(i);
            linkedList.addLast(i);
        }
        for (int i = 0; i < 100000; i++) {
            linkedList.removeFirst();
            linkedList.removeLast();
        }
        long end = new Date().getTime();
        return end-begin;
    }
}
